/**
*  \class MatrixBenchmark
*  \brief Implements the benchmark tests for \c Matrix class.
*  \author Marco Gregnanin
*  \version 1.0.0a
*  \date    10 February 2011
*/

#ifndef MATRIXBENCHMARK_H
#define MATRIXBENCHMARK_H


#include "../MathLib/matrix.cpp"
#include <iostream>
#include <QObject>
#include <QTime>


using namespace MathLib;


class MatrixBenchmark : public QObject
{
    Q_OBJECT

public:
    MatrixBenchmark();                              //!< \c MatrixBenchmark class constructor

private Q_SLOTS:
    //void test_data();                               //!< Temporary test
    void benchmarkEmptyMatrix();                    //!< Benchmark for empty matrix constructor
    void benchmarkMatrix();                         //!< Benchmark for N-dimensional matrix constructor
    void benchmarkCopyMatrix();                     //!< Benchmark for copy matrix constructor
    void benchmarkDataAccessBySingleIndex_Matrix(); //!< Benchmark for matrix data access operator '()'
    void benchmarkDataAccessBySingleIndex_Array();  //!< Benchmark for array access operator '[]'
    void benchmarkDataAccessByTwoIndices_Matrix();  //!< Benchmark for 2D matrix data access operator '()'
    void benchmarkDataAccessByTwoIndices_Array();   //!< Benchmark for array access operator '[]' with two indices
    void benchmarkAssignmentMatrix();               //!< Benchmark for matrix assignment operator '=' with Matrix input
    void benchmarkAssignmentArray();                //!< Benchmark for array assignment
};


#endif // MATRIXBENCHMARK_H
